package org.wj.arithmetic

import org.apache.spark.rdd.RDD
import org.wj.config.LocalSparkContext

/**
 * 如果方法中的第二个参数shuffle为false，则会将“分区数较多的原始RDD”向“分区数较少的目标RDD”进行转换， 如果目标RDD分区数大于原始RDD的分区数，则维持原分区数不变
 *
 * 将较多的分区聚合为较少分区不必经过Shuffle过程。而将较少分区扩展为较多分区，则必须经过Shuffle过程。在coalesce方法中，shuffle参数默认false，即该方法在默认情况下不会经过Shuffle过程
 *
 */
object Coalesce extends App with LocalSparkContext{

  private val rdd: RDD[Int] = sc.parallelize(1 to 10, 3)

  rdd.cache()

  private val rdd1: RDD[Int] = rdd.coalesce(5)

  println(rdd1.partitions.length)

  private val rdd2: RDD[Int] = rdd.coalesce(2)

  println(rdd2.partitions.length)






}
